home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 3: Developer Tools / Linux Cubed Series 3 - Developer Tools.iso / devel / lang / ada / adaed-1.11 / adaed-1 / Adaed-1.11.0a / libhdr.vbs < prev    next >
Encoding:
Text File  |  1992-02-07  |  19.9 KB  |  675 lines

  1. /*
  2.  * Copyright (C) 1985-1992  New York University
  3.  * 
  4.  * This file is part of the Ada/Ed-C system.  See the Ada/Ed README file for
  5.  * warranty (none) and distribution info and also the GNU General Public
  6.  * License for more details.
  7.  
  8.  */
  9. /* header file for libfile*/
  10. #ifndef _libhdr_h
  11. #define _libhdr_h
  12. /*
  13.  
  14. Changes:
  15.  
  16. 20-aug-85
  17. delete fs_symbol_orig_name field since it is dead.
  18.  
  19. 25-june-85
  20. add field ev_nodes to Stubenv to store unit_nodes for a stub.
  21.  
  22. 12-mar-85
  23. Add fields f_node and f_symbol for generator fields. This version of
  24. libhdr.c built starting from sem version 1.17 and should be merged
  25. with sem libhdr.c ASAP
  26.  
  27. 12-dec-84    ds
  28. Replace use of tuple for unit_decl values by struct.
  29. Change AIS version to 1.
  30.  
  31. 18-nov-84    ds
  32. Need to keep record of root node: change calling sequence of write_tre,
  33. add new (last) entry to ref_info with sequence number of root node.
  34.  
  35. 16-nov-84    ds
  36. Add f_node_spans[4] fields for span information.
  37. add f_symbol_type_attr for type_attribute field information.
  38. -------
  39. This file documents features related to separate compilation.
  40.  
  41. Information about separate compilation is kept in three files:
  42.     TRE    holds abstract trees for one or more units
  43.     AIS    holds symbol table and additional info for one or
  44.         more units
  45.     LIB    indicates which TRE and AIS files to use.
  46.  
  47. The format of the ais and tree files is kept in the file header block
  48. (described below). This header block includes a version indication
  49. that should be changed whenever the format is changed:
  50. The version numbers are defined in config.h  (ds 9-16-85).
  51. */
  52.  
  53. /*
  54. We begin by describing the representation in C of the data structures
  55. needed and the additional procedures introduced. We then discuss the
  56. actual formats used for the external file representation in C.
  57.  
  58. unit names        *;UNIT_NAMES
  59. ----------------------
  60. A unit_name is represented by a single string. The first two characters give 
  61. the unit type:
  62.     su    subprog
  63.     ss    subprog spec
  64.     sp    package spec
  65.     bo    package body
  66. The unit type is followed by the unit name.
  67. This name may be followed by the names of depedent units, each preceded
  68. by a period in the case of subunits.
  69. The following procedures are provided to assist in checking the
  70. attributes of unit_names:
  71.     char *unit_name_type(uname)
  72.         returns first two chracters
  73.     char *unit_name_name(uname)
  74.         returns the second field (i.e, rest starting with 3rd char
  75.     char *unit_name_names(uname)
  76.         returns all names, beginning with the second field.
  77.     char *unit-name_tail(uname)
  78.         returns names, starting with third field, or null string.
  79.  
  80. */
  81.     
  82. /*
  83. Unit numbers        *;UNIT_NUMBERS
  84. ------------
  85. Each compilation unit has a unique unit number. 
  86. Once assigned, this unit number does not change. The procedure
  87.     unit_number(unitname)
  88. gives the unit number of the unit with name unitname. 
  89. unit_number will assign a number if none yet assigned and initialize
  90. related data structures (cf. descriptions of lib_info, ais_info and
  91. tre_info below). To see if a unit has been numbered, that is, encountered
  92. before, use the procedure
  93.     unit_numbered(unitname)
  94. which returns the unit number if a unit number has already been assigned,
  95. 0 otherwise.
  96. The global
  97.      int unit_numbers 
  98. gives the number of units for which units numbers have been assigned.
  99. Nodes in the AST belonging to the unit have their N_UNIT field set to the 
  100. unit number; symbols have their S_UNIT field set to the unit number. 
  101. Unit numbers begin with one, except that symbols in the scope 'standard' 
  102. have unit number zero.
  103. The names of compilation units are kept in the tuple unit_names.
  104. unit_names[i] is name of the compilation unit with compilation unit
  105. number i. If
  106.  
  107.     i = unit_number(uname);
  108. then
  109.     unit_names[i] is uname.
  110. */
  111.  
  112. /*
  113. Sequence numbers        *;SEQUENCE
  114. ----------------
  115. While compiling a unit, the (global) tuples seq_node (for nodes)
  116. and seq_sym are kept to track the location of allocated nodes and
  117. symbols.
  118. seq_node[0] is maximum number, seq_node_n is number
  119. actually allocated, so allocatin sequence is
  120.     if ((seq_node_n = (int) seq_node[0]) {
  121.         seq_node = tup_exp(seq_node,seq_node+SEQ_NODE_INC);
  122.     }
  123.         seq_node_n += 1;
  124.         seq_node[seq_node_n] = ...
  125. To reset so can reuse list, just set seq_node_n = 0.
  126.  */
  127.  
  128. /*
  129. Library Files.        *;LIBRARY_FILES (Internal)
  130. --------------
  131. In SETL a library consists of two maps defined on unit names.
  132. The first yields a tuple [LIB_COUNT,LIB_TREE, LIB_UNIT] where LIB_COUNT
  133. is an integer, LIB_TREE is the name of the TREE file, and LIB_UNIT is
  134. the name of the AIS file. The second, LIB_STUB is a map to file names.
  135.  
  136. The unit name is expressed in the standard string form used within
  137. the C version. 
  138. The unit index is used to access the global tuple
  139.     lib_info
  140. lib_info[i] is a tuple with components as follows:
  141. 1)    name of ais (tre) file
  142. Additional entries may be allocated later. The following macro gives
  143. the length of each tuple in lib_info:
  144.  */
  145. #define LIB_INFO_TUPLEN        5
  146.  
  147. /*
  148. LIB_UNIT        *;LIB_UNIT
  149. --------
  150.  
  151. As for LIB_UNIT, in SETL this is a map from unit_name's to (ais) file names.
  152. In C we maintain it using the following procedures:
  153.  
  154. char *lib_unit_get(uname)
  155.     char    *uname;
  156.  returns filename or null string pointer ( (char *) 0).
  157.  
  158. lib_unit_put(uname,fname);
  159.     char    *uname,*fname;
  160.  set filename for unit uname to be fname.
  161.  
  162. These routines access lib_info as described above.
  163.  
  164. Similar routines are provided for lib_stub.
  165.  
  166.  */
  167.  
  168.  
  169. /*
  170. In SETL the AIS file consists of five maps: COMP_DATE, PRE_COMP,
  171. UNIT_DECL and STUB_ENV. We now discuss how each is represented
  172. in the C version.
  173.  
  174. COMP_DATE            *;COMP_DATE
  175.  In the SETL version a compilation date is kept as a tuple of three components:
  176.  the date, the time and the compilation unit number. In the C version,
  177.  the date and time are as computed by greentime() (misc.c).
  178.  greentime(un) returns a string of 23 characters, formatted as follows:
  179.     123456789a123456789b123
  180.     1984 10 02 16 30 36 uuu
  181.  where uuu is unitnumber un converted to string.
  182. The COMP_DATE map in SETL is maintained in C using the following
  183. procedures:
  184.     char *comp_date_get(unitindex,unitname)
  185.         int    unitindex;
  186.         char    *unitname;
  187.     comp_date_put(unitindex,unitname,unitdate)
  188.         char    *unitdate;
  189.  
  190.  where unitindex is unit index returned by compunit_index, unitname
  191.  is the unit name, and unitdate is a string.
  192.  
  193.  The SETL code sequence
  194.  
  195.     if COMP_DATE(spec_name)= om then om
  196.     else COMP_DATE(spec_name)(spec_name) end;
  197.  occurs several times and is represented in C by
  198.     versions_used_update(spec_name);
  199.  The SETL map versions_used is kept in C as a tuple, with i-th
  200.  component being unit name (string), and i+1-st component being
  201.  value (a tuple).
  202.    The SETL version also has map versions_used which is maintained in
  203.    the same way.
  204.  
  205.  */
  206.  
  207. /*
  208. PRE_COMP            *;PRE_COMP
  209. PRE_COMP is a list of unit names that need to be compiled before this
  210. unit. In SETL it is kept as a set. In C it is kept as a tuple.
  211. */
  212.  
  213. /*
  214. UNIT_DECL            *;UNIT_DECL
  215. ---------
  216. In SETL, UNIT_DECL is a map from unit names to tuples. In C, the structure
  217. Unitdecl is used instead of tuples. We first describe the use of UNIT_DECL
  218. in SETL.  Note that in SETL the first two components are the same for 
  219. each unit type.
  220.  
  221. SUBPROGRAM: (unit type "su"or "ss")
  222. In the SETL version, UNIT_DECL for a subprogram is a tuple with the
  223. following components:
  224.  
  225. 1) UNIT_NAM:  unit name
  226. 2) S_INFO:  a map from unique names to their symbol table fields, computed
  227.     by unit_symbtab(10).
  228. 3) DECMAP:  declared map
  229. 4) CONTEXT:  tuple of with and use clause names
  230. 5) UNIT_NODES: tuple of nodes
  231. See for instance, subprog_body (6)
  232. Note that components CONTEXT and UNIT_NODES were recently added, 
  233. cf. save_comp_info(10).
  234. CONTEXT is a tuple of with and use clauses; each entry is a pair,
  235. the first component is either AS_WITH or AS_USE, the second component
  236. is a tuple of strings.
  237.  
  238. The declaration for the struct used is as follows:
  239. */
  240. typedef struct Unitdecl_s
  241. {
  242.     Symbol    ud_unam;  /* unit name */
  243.     int    ud_unit;  /* unit number of unit name     */
  244.     int    ud_useq;  /* sequence number of unit name */
  245.     Tuple    ud_context;
  246.     Tuple    ud_nodes;
  247.     Tuple    ud_symbols;
  248.     Tuple    ud_decscopes;
  249.     Tuple    ud_decmaps;
  250.     Tuple    ud_oldvis;
  251. } Unitdecl_s;
  252.  
  253. typedef Unitdecl_s *Unitdecl;
  254.  
  255. typedef struct Stubenv_s
  256. {
  257.     Tuple    ev_scope_st;
  258.     Tuple    ev_open_decls;
  259.     Tuple   ev_nodes;
  260.     Symbol    ev_unit_unam;
  261.     Declaredmap ev_decmap;
  262.     Tuple    ev_context;
  263.     int    ev_current_level;
  264.     Tuple    ev_relay_set;
  265.     Tuple   ev_dangling_relay_set;
  266. } Stubenv_s;
  267.  
  268. typedef Stubenv_s *Stubenv;
  269. /*
  270. ud_type is string giving unit type, "ss" for subprogram spec, etc.
  271. ud_unum is the unit number.
  272. ud_unam is symbol table pointer for unit name.
  273. ud_useq is sequence number of ud_unam symbol.
  274. ud_context is tuple of use and with clauses. Each clause is a tuple with
  275. two components. The first component is the kind: AS_WITH or AS_USE; the second
  276. component is a tuple of strings.
  277. ud_nodes is a tuple of nodes.
  278. ud_symbols is a tuple of symbols.
  279. ud_decscopes is a tuple of symbols.
  280. ud_decmaps is a tuple of declared maps.
  281. ud_oldvis is a tuple of strings naming units formerly visible.
  282.  
  283. In the C version, the following fields are used:
  284. Field        SETL component        name
  285. ud_unam        1            UNIT_NAM
  286. ud_useq        1            "
  287. ud_symbols    2            S_INFO
  288. ud_decscopes    3            DECMAP
  289. ud_decmaps    3            DECMAP
  290. ud_context    4            CONTEXT
  291. ud_nodes    5            UNIT_NODES
  292.  
  293.  
  294. PACKAGE (unit type "sp")
  295. -------
  296. In the SETL version, UNIT_DECL for a package is a tuple as follows:
  297. 1)  UNIT_UNAM: the unit name
  298. 2)  SPECS:  a map from unique names to their symbol table fields,
  299.     computed by unit_symbtab (10).
  300. 3)  DECMAP:  a map from scopes to declared maps
  301. 4)  OLD_VIS:  a tuple of units formerly visible
  302. 5)  NOTVIS:  similar to decmap this is map from scopes to  declared maps,
  303.     but kept only for non-visible entries. This is used to reconstruct
  304.     the visible map.
  305. 6) CONTEXT: as for subprogram
  306. 7) UNIT_NODES: as for subprogram
  307.  
  308. Cf, module_body(7), get_specs(7).
  309.  
  310. In the C version, the following fields are used:
  311. Field        SETL component        name
  312. ud_unam        1            UNIT_UNAM
  313. ud_useq        1            UNIT_USEQ
  314. ud_symbols    2            SPECS
  315. ud_decmaps    3            DECMAP (see below)
  316. ud_decscopes    3            DECMAP (see below)
  317. ud_oldvis    4            OLD_VIS
  318. (not needed)    5            NOTVIS (see below)
  319. ud_context    6            CONTEXT
  320. ud_nodes    7            UNIT_NODES
  321.  
  322. In the C version, notvis is not necessary since we are keeping the visible
  323. attribute as part of the declared map. In the C version, we keep decmap
  324. as two tuples: a tuple of scopes and a tuple of pointers to their
  325. corresponding declared maps.
  326.  
  327. PACKAGE_BODY (unit type "bo")
  328. The SET version has
  329. 1) unit name
  330. 2) unit_symbtab, as compued by unit_symbtab (10).
  331. 3) context
  332. 4) unit_nodes
  333.  
  334. unit_type: "bo"
  335. The C version has
  336. In the C version, the following fields are used:
  337. Field        SETL component        name
  338. ud_unam        1            UNIT_NAME
  339. ud_useq        1            UNIT_NAME
  340. ud_symbols    2            UNIT_SYMBTAB
  341. ud_context    3            CONTEXT
  342. ud_nodes    4            UNIT_NODES
  343.  
  344.  
  345. Note that the components are same as for PACKAGE, except there are only
  346. five of them.
  347. Cf. save_body_info (10).
  348.  
  349. The SETL map UNIT_DECL is maintained in C by the following procedures:
  350.  
  351. unit_decl_put(s,t)
  352.     char    *s;
  353.     Unitdecl    t;
  354.   save info t for unit with unit_name s
  355.  
  356. Unitdecl unit_decl_get(s) 
  357.     char *s;
  358.   return saved (by unit_decl_put) info for unit_name s.
  359.   returns (Unitdecl) 0 if no such saved tuple exists.
  360.  
  361. */
  362.  
  363.  
  364.  
  365. /*
  366. CODE_UNITS            *;CODE_UNITS
  367. In SETL CODE_UNITS is the tuple produced by emit. In the C version this
  368. is not needed, and is always a null tuple.
  369. */
  370.  
  371. /*
  372. STUB_ENV            *;STUB_ENV
  373. In SETL, STUB_ENV is a tuple with seven entries. See save_stub (10) for
  374. exact details of components. The C representation of STUB_ENV is still
  375. open.
  376.  */
  377.  
  378. /*
  379. AIS_INFO            *;AIS_INFO
  380. The maps COMP_DATE, etc. maintained in the SETL version are maintained 
  381. in
  382. the tuple ais_info indexed by unit number. Each entry is a tuple,
  383. as follows:
  384. 1) COMP_DATE
  385. 2) PRE_COMP
  386. 3) UNIT_DECL
  387. 4) CODE_UNITS
  388. 5) STUB_ENV
  389. 6) SYMBOLS: number of symbols
  390. 7) SYMPTR: tuple such that SYMPTR[i] is pointer to symbol table
  391.     entry allocated for symbol with sequence number i.
  392.     When writing the file, this is a copy of SEQ_SYMBOL.
  393. 8) SYMOFF: ptr to array of longs SYMOFF such that SYMOFF[i] is file offset
  394.     of start of information for symbol with sequence number i.
  395.     The array SYMOFF is stored in the file starting at offset SOFFSET.
  396.  
  397. The length of each tuple in ais_info is given by:
  398. */
  399. #define AIS_INFO_TUPLEN        8
  400.  
  401. /*
  402. PREDEF_UNITS            *;PREDEF
  403. ------------
  404. In SETL PREDEF_UNITS is a set of unit_names. 
  405. In C, it is a tuple 'predef_units', accessed using the following procedures 
  406. (the standard tuple operations less and with cannot be used since elements 
  407. are strings):
  408.  
  409.     in_predef_units(u) char *u;
  410.     returns TRUE if u is in predef_units
  411.     
  412.     predef_units_with(u,s) char *u; Symbol s;
  413.     adds u to predef_units
  414.  
  415.     predef_units_less(u) char *u;
  416.     removes u from predef_units;
  417.  
  418.  */
  419.  
  420.     
  421. /*
  422. LIB FILE            *;LIB FILE (External)
  423. LIB File        *;LIB FILE (external)
  424. The C representation of a library file (LIB) will be as a text file.
  425. The first line gives the number of entries in the first map.
  426. The following information is maintained for each unit in the lib (one line per
  427. unit).
  428.     unit name,
  429.     unit number
  430.     name of AIS (TRE) file
  431. The next line gives the number of entries in the LIB_STUB map.
  432. There follow two lines for each entry (or no further lines if the
  433. entry count is zero): the first is the unit name, the second is the
  434. name of the file containing the translation of the stub of the subunit.
  435.  
  436. For example:
  437. 1            number of entries    
  438. suMAIN            type and name of first unit
  439. 1            unit number of first unit
  440. main            name of ais (tre) file    
  441. 0            number of entries in LIB_
  442.  
  443. The procedure read_lib reads in a library file and updates lib_names
  444. and lib_info. The procedure write_lib writes lib_names and lib_info
  445. to the library file in the text format described above.
  446.  */
  447.     
  448. /*
  449. Header block        *;HEADER
  450. -----------------------------------------------
  451. The TRE and AIS files produced by the C version each
  452. contains information for one or more compilation units.
  453.  
  454. Character strings are represented in these files as follows:
  455. The undefined string - (char *) 0 - is written as zero. Otherwise
  456. there is written
  457. an integer (int) giving the number of characters in the string
  458. (including the trailing null byte). This word is followed
  459. by the specified number of bytes (the trailing null byte does
  460. not appear in the file). 
  461.  
  462. In the file references to symbols and nodes are indicated by
  463. writing the unit and sequence numbers, respectively, each in
  464. a word (int). An optimization, NOT implemented now, would be
  465. to suppress the unit number if it is that of the unit being
  466. written, writing a negative sequence number in this case.
  467.  
  468. Each of the files begins with a standard header block:
  469.     char    type ('a' for ais, 't' for tre files)
  470.     char    version
  471. The current versions are defined by the macros AIS_VERSION and
  472. TRE_VERSION.
  473.  
  474. Each records begins with a long word giving offset (from start of file) 
  475. of start of next record. For the last record this will be a value greater
  476. than the file length, or zero if no records in file.
  477.  
  478. To open a tree or ais file, use:
  479.  
  480.     FILE *open_file(fname,mode,type)
  481.         char *fname,*mode,type
  482.  
  483. where fname is the file name, mode the file mode ("r" or "w") and
  484. type is 'a' or 't' for ais or tree file, respectively.
  485.  
  486. When writing a file, begin a record with
  487.  
  488.     long    begpos;
  489.     begpos = write_start();
  490.  
  491. and do
  492.  
  493.     write_end(begpos)
  494.  
  495. when record done to update pointers kept in the file.
  496.  
  497. To read a file, use the sequence:
  498.  
  499.     long    record,read_init(),read_next();
  500.     for    (record=read_init; record!=0; record=read_next(record)) {
  501.         ...
  502.     }
  503.  
  504. */
  505.  
  506. /*
  507. TREE File Structure            *;TREE
  508. -------------------
  509. A tree file has the standard header block. 
  510. The tree for each unit is formatted as follows:
  511.     (str)    unit name
  512.     (int)    unit number
  513.     (int)    number of items (nodes)
  514.     (long)    N+1 longs, the i-th gives the file offset (if any)
  515.         of node with sequence i, etc.
  516.     (int)    sequence number of root node.
  517.     (...)    The entries for the nodes follow, in format as
  518.         described below (cf. putnod).
  519. */
  520.  
  521.  
  522. /* The information for the following fields is optional:
  523.     n_list
  524.         shorts representing node references
  525.     n_val
  526.         the format varies according to the n_kind, see
  527.         putnval (and getnval) for details
  528.     
  529.     the N_NAMES and P_TYPES maps are irrelevant after semantic
  530.     processing and therefore, are not written.
  531.  
  532. The global tuple tre_info contains information about a tree that has
  533. been read in. For  unit number i, tre_info[i] is a tuple as follows:
  534. 1) NODES: number of nodes
  535. 2) NODPTR: Tuple such that NODPTR[i] is ptr to node with sequence
  536.     number i.
  537.     When writing the file, this is a copy of SEQ_NODE.
  538.     When reading the file, this is used to create SEQ_NODE.
  539. 3) NODOFF: ptr to array of longs NODOFF such that 
  540.     NODOFF[i] is file offset of node with sequence number I.
  541.     This array is stored in the file at offset NOFFSET.
  542. 4) NODROOT: sequence number of root node.
  543. */
  544. #define TRE_INFO_TUPLEN 4
  545.  
  546. /*
  547. AIS File Structure            *;AIS
  548. ------------------
  549. An AIS file contains one or more compilation units. 
  550. The file begins with the standard header block, type 'a'.
  551.  
  552. The data for each compilation unit as follows:
  553.     (str)    unit name
  554.     (int)    unit number
  555.     (long)    offset to code generator information (or 0 if no info yet)
  556.     (int)    number of items (symbols) N
  557.     (long)    N+1 longs, the i-th gives the file offset (if any)
  558.         of symbol with sequence i, etc.
  559. There follows the initial ais_info values, as follows:
  560. COMP_DATE: 
  561.     (int)    number of entries
  562. each entry is as follows:
  563.     (str)    name of first unit
  564.     (str)    name of second unit
  565.  
  566. PRE_COMP:
  567.     (int)    number of entries
  568. each entry is a string.
  569.  
  570. UNIT_DECL:
  571. The first four components in the C form are always the same:
  572. 1) Symbol table for unit
  573. 2) Sequence number of (1)
  574. 3) Context: tuple of use and with clauses 
  575. 4) UNIT_NODES:tuple of nodes
  576. These are written to the file as follows:
  577. (int)        sequence number
  578. There follows context, a tuple: each entry is itself a tuple
  579. with the first component written as an int, the second as a string.
  580. There follows UNIT_NODES: a tuple of nodes, written as node references.
  581. The fifth component is always a tuple of symbol table pointers, written
  582. as a tuple of symbol references.
  583.  
  584. SUBPROG:
  585. In the C version, the UNIT_DECL information is written as follows:
  586. (int)    UNIT_SEQ: sequence number for unit UNIT_NAM symbol
  587.     tuple of symbol table references
  588. DECMAP    declared map.
  589. Declared maps are written as follows. Each entry is written as a 
  590. string, a symbol reference and a byte indicating visibility (zero
  591. for invisible, one for visible). The list ends with an entry with
  592. a null string, a symbol reference with unit and sequence zero, and
  593. a visibility byte of zero.
  594.  
  595. CONTEXT:  tuple of use and with clause names.
  596. Each entry is written as a word (int) giving clause type, followed
  597. by a string.
  598.  
  599. UNIT_NODES: tuple of nodes
  600.  
  601.  
  602. PACKAGE
  603. -------
  604.  
  605.     UNIT_SEQ:    sequence number of unit_unam symbol (int)
  606.  
  607.     SPECS - tuple of symbol table pointers
  608.  
  609.     DECSCOPES - tuple of scopes
  610.  
  611.     OLD_VIS - tuple of unit names
  612.  
  613.     DECMAPS; tuple of declared maps
  614.         this consists of (int) with tuple size followed by
  615.         entry for each declared map.
  616.  
  617.     CONTEXT: tuple of use and with clauses
  618.  
  619.     UNIT_NODES tuple of nodes
  620.  
  621.  
  622.     CODE_UNITS:
  623. Retained for compatibility, no data written now, just:
  624.     (int)    0
  625.  
  626. STUB_ENV:
  627. ???
  628.  
  629. The symbol table information follows:
  630.     (int)    number of symbol table entries
  631. Each symbol table entry begins with the standard information
  632. written using the following structure:
  633.  */
  634. typedef struct f_symbol_s
  635. {
  636.     short        f_symbol_nature;        
  637.     short        f_symbol_seq;    
  638.     short        f_symbol_unit;    
  639.     short        f_symbol_type_of_seq;
  640.     short        f_symbol_type_of_unit;
  641.     short        f_symbol_scope_of_seq;
  642.     short        f_symbol_scope_of_unit;
  643.     short        f_symbol_signature;    
  644.     short        f_symbol_overloads;
  645.     short        f_symbol_declared;
  646.     short        f_symbol_alias_seq;
  647.     short        f_symbol_alias_unit;
  648.     short        f_symbol_type_attr;
  649.     /* remaining fields used by code generator */
  650.     short        f_symbol_misc;
  651.     short        f_symbol_type_kind;
  652.     short        f_symbol_type_size;
  653.     short        f_symbol_init_proc_seq;
  654.     short        f_symbol_init_proc_unit;
  655.     short        f_symbol_assoc_list;  /* for _type, etc */
  656.     short        f_symbol_s_segment; /* REFERENCE_MAP segment */
  657.     short    f_symbol_s_offset; /* REFERENCE_MAP offset */
  658. } f_symbol_s;
  659.  
  660. /* 
  661.   orig_name follows struct if string not empty. It is written by putstr.
  662.  
  663.   The overloads information is written by procedure putovl.
  664.  
  665.   The declared map info follows. For symbol with nature na_enum,
  666.   this is literal map (see procedure putlitmap); 
  667.   othwerwise is it declared map in standard format (see procedure putdcl).
  668.  
  669.   The signature is written by procedure putsig; sese it for
  670.   details on how signature written.
  671.  
  672. */
  673.  
  674. #endif
  675.